package Day21.MethodReference;

import javax.crypto.spec.PSource;

/**
 * @version 1.0
 * @BelongsProject:IntelliJ IDEA
 * @BelongsPackage:Day21.MethodReference
 * @Author:hyhWTX
 * @ClassName:Demo01Printable
 * @CreateTime:2022年-10月-19日 22:02
 * @Description: TODO (一句话描述以下该类的功能)
 */
public class Demo01Printable {
   /***
    *
    * @author hyhWTX
    * @date 2022/10/19 22:17
    * @param p
    * 定义一个方法，参数传递Printable接口，对字符串进行打印
    */

    public static void printString(Printable p){
        p.print("hello world!");
    }

    public static void main(String[] args) {
        //调用printString方法，方法的参数Printable是一个函数式接口，所以可以传递Lambda
        printString(s -> {
            System.out.println(s);
        });

        /***
         *
         * @author hyhWTX
         * @date 2022/10/19 22:23
         * 分析：
         *      Lambda表达式的目的，打印参数传递的字符串。
         *      把参数s，传递给了System.out对象，调用out对象中的方法print对字符串进行了输出
         *      注意：
         *          1.System.out对象是已经存在的。
         *          2.println方法也是已经存在的
         *      所以我们可以使用方法引用来优化Lambda表达式
         *      可以使用System.out方法直接引用（调用）println方法
         */
        printString(System.out::println);

    }
}
